class Solution {
public:
    bool _isSymmetric(TreeNode* l,TreeNode* r)
    {
        if(l == nullptr&&r == nullptr)
        {
            return true;//左子节点和右子节点都是空代表对称
        }
        if(l == nullptr||r == nullptr)
        {
            return false;
        }//有一个节点为空，但是另外一个节点不为空
        if(l->val != r->val)
        {
            return false;//对称节点的值应该是相等
        }
        //现在这个对称节点已经考虑完了，需要去考虑对称节点的左子树和右子树了
        return _isSymmetric(l->left,r->right)&&_isSymmetric(l->right,r->left);
        //下面的对称节点就是l的左子节点和右子树的右子节点，以及左子树的右子节点和右子树的左子节点
    }
    bool isSymmetric(TreeNode* root) {
        //对称节点的几个特点第一个对称节点的值是相等的，这里假设为L，R，然后
        //L左子节点的值等于R右子节点的值，L右子节点的值等于R左子节点的值，满足以上条件那么这这就是一个对称节点
        return _isSymmetric(root->left,root->right);
    }
};